mscJNeuralNet.connectors
Class RandomSymmetryBreakingNetConnector
java.lang.Object
mscJNeuralNet.connectors.RandomSymmetryBreakingNetConnector
- All Implemented Interfaces:
- INetConnector
- public class RandomSymmetryBreakingNetConnector
- extends java.lang.Object
- implements INetConnector
Kantengewichtsinitialisierung mit Zufallswerten entsprechend den eingehenden Verbindungen
eines Neurons.
Aus Prof. Dr. H. Westenberger, Skript Neuronale Netze 99V011:
Kapitel: 2.5.1 Symmetry breaking
"Für Feedforward-Netze, die ebenenweise aufgebaut sind, sollten die Gewichte
einer Verbindungsschicht beim Start nicht sämtlich gleich initialisiert werden.
In einem ff1-Netz mit einem Hidden-Layer würden nämlich aus
Symmetriegründen die Kantengewichte, die von einem Input Knoten ausgehen
ebenso wie alle Kanten zu einem Outputknoten gleich bleiben
Lösung: Bei der Initialiserung der Gewichte verwende man Zufallszahlen.
Optimal sind die Kantengewichte, wenn die Betragssumme der
Kantengewichte, die zu einem Neuron führen, betragsmäßig klein bleiben,
allenfalls in der Größenordnung von 1 liegen. Damit wird der Netzinput in der
Nähe von 0 liegen, und die sigmoide Transferfunktion relativ große
Ableitungen erreichen. In dieser Situation kann sich das Netz schnellstens
anpassen. Aus diesem Grund empfiehlt sich, die Zufallszahlen für die
Kantenvorbelegung zu einem Neuron mit N Vorgängerneuronen aus dem
Intervall [-1/N; 1/N], zu wählen."
Im folgenden Beispiel wird der RandomSymmetryBreakingNetConnector benutzt,
um die Kantengewichte mit Zufallswerten entsprechend zu initialisieren:
int [] lLayerSizes = {2, 1};
Net myNet = new Net();
INetConnector lRndSymBreakCon = new RandomSymmetryBreakingNetConnector();
lRndSymBreakCon.connectNet(myNet, null);
Created on 02.06.2004
- Version:
- 02.06.2004
- Author:
- M. Serhat Cinar
- See Also:
INetConnector
Method Summary |
void |
connectNet(Net pNet,
double[] pParameters)
Gegebene Parameter werden nicht berücksichtigt. |
java.lang.String |
toString()
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
RandomSymmetryBreakingNetConnector
public RandomSymmetryBreakingNetConnector()
connectNet
public void connectNet(Net pNet,
double[] pParameters)
- Gegebene Parameter werden nicht berücksichtigt. Daher sollte der
Parameterarray als null übergeben werden.
Nach der Initialisierung werden die Observer des Netzes benachrichtigt.
- Specified by:
connectNet
in interface INetConnector
- Parameters:
pNet
- Das Netz, dessen Kantengewichte initialisiert werden sollen.pParameters
- Je nach Initialisierungsalgorithmus können hier verschiedene Parameter
übermittelt werden.- See Also:
INetConnector.connectNet(Net, double[])
,
ObserverManager.notifyObservers(Observable)
toString
public java.lang.String toString()